package com.cskaoyan.javase.overload._1extend;
/**
 * 扩展补充知识:
 * 思考：
 * 如果我想在很多方法中，唯一地找到一个方法，需要明确什么？
 * 为什么很多方法构成方法重载后,它的调用不受影响呢?
 *
 * 因为编译器可以根据方法的形参有无,数据类型是什么等来判断匹配哪个方法
 *
 * 但是由于方法的实参数据类型,和方法的形参数据类型存在自动类型转换
 * 也就是说并不需要完全保持一致,这时就可能出现,在方法调用时,多个方法都能够正常匹配的情况
 *
 * 这时,方法的匹配就要遵循Java当中最常见的设计原则:"就近原则"
 * 就近原则: 如果有多个选项都能够匹配时,那么就找出一个规则,匹配最近的
 * 就近原则最重要的就是找到一个规则,指出"谁更近"
 *
 * 方法的匹配过程中,存在自动类型转换,它的匹配"就近原则"
 * 肯定会优先考虑不需要转换的,能够直接匹配的
 * 如果没有直接匹配的,那就考虑类型转换的"远近"
 * 基本数据类型数值类型取值范围,由小到大:
 * byte,short/char,int,long,float,double
 * 在转换过程中,跳过的数据类型越多,就是越远.
 *
 * 扩展:
 * "就近原则"不是万能的,一旦出现了一种"找不到规则确定远近"的情况,就近原则就会失效.
 * 代码就会报错.
 *
 * @since 17:32
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // test();
        // test(10);
        // Ambiguous method call: both 'detail.test(double, int)' and 'detail.test(int, double)' match
        // test(1,1);
    }
    public static void test(){}
    // public static void test(int a){}
    public static void test(double a){}
    public static void test(float a){}
    public static void test(long a){}

    public static void test(double a,int b){}
    public static void test(int a,double b){}
}
